import axios from "axios";
// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASEURL || "",
  timeout: 5000, // 请求超时时间
  headers: {
    "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
  }
});

// 短链现在不需要多个端，多环境在对应的.env 里修改即可
let urlPaths = { hix: "xxx" };
// request拦截器
service.interceptors.request.use(
  config => {
    //get 请求添加时间戳
    if (config.method == "get") {
      config.params = {
        _t: Date.parse(new Date()) / 1000,
        ...config.params
      };
    }
    const urlPathsReg = /^(\w+):\/*/;
    config.url = config.url.replace(urlPathsReg, function(s0, s1) {
      return urlPaths[s1] || s0;
    });
    let Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
    // 非全路径，将 baseURL 加到前面
    if (config.baseURL && !new RegExp(Expression).test(config.url)) {
      config.url = config.baseURL + config.url;
    }
    return config;
  },
  error => {
    // Do something with request error
    Promise.reject(error);
  }
);

service.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    return Promise.reject(error);
  }
);

/**
 * 使用es6的export default导出了一个函数，导出的函数代替axios去帮我们请求数据，
 * 函数的参数及返回值如下：
 * @param {String} method  请求的方法：get、post、delete、put
 * @param {String} url     请求的url:
 * @param {Object} data    请求的参数
 * @returns {Promise}     返回一个promise对象，其实就相当于axios请求数据的返回值
 */
export default function(method = "get", url = "", data = {}) {
  method = method.toLowerCase();
  if (method == "post") {
    return service.post(url, data);
  } else if (method == "get") {
    return service.get(url, { params: data });
  } else if (method == "delete") {
    return service.delete(url, { params: data });
  } else if (method == "put") {
    return service.put(url, data);
  } else {
    console.error("未知的method" + method);
    return false;
  }
}
